/**
 * 取最大公约数
 * @param  {...number} args
 * @returns {number}
 * @example gcd(8, 36) // 4
 * @example gcd(12, 8, 32) // 4
 */
export function gcd(...args) {
  const gcd = (x, y) => !y ? x : gcd(y, x % y)
  return [...args].reduce((a, b) => gcd(a, b))
}

/**
 * 深拷贝
 * @param value
 * @return {any}
 */
export function deepClone(value) {
  if (Array.isArray(value)) {
    return value.map(deepClone)
  }
  if (Object.prototype.toString.call(value) === '[object Object]') {
    return Object.keys(value).reduce((acc, key) => {
      acc[key] = deepClone(value[key])
      return acc
    }, {})
  }
  return value
}
